/// @file
/// @author Chelsey Batchelor <vadedeyes@gmail.com>
/// @author Abraham Escamilla <abraham.escamilla@live.com>
/// @author Curtis Hollibaugh <curtis.hollibaugh@gmail.com>
/// @copyright Copyright 2014 Chelsey Batchelor <vadedeyes@gmail.com>
/// @copyright Copyright 2014 Abraham Escamilla <abraham.escamilla@live.com>
/// @copyright Copyright 2014 Curtis Hollibaugh <curtis.hollibaugh@gmail.com>
/// Contains the declaration of the TrayIcon class.

#pragma once

#include "gtk.hpp"

#include <string>

/// A notification tray icon.
class TrayIcon {
	private:
		GtkStatusIcon* statusIcon; ///< GTK+ specific handle for the tray icon.
		
	public:
		/// Default constructor.
		TrayIcon() noexcept;
		
		/// Constructs a TrayIcon with the icon at the given path.
		/// @param [in] iconPath Path to the icon to use.
		TrayIcon(const std::string& iconPath) noexcept;
		
		/// Destructor.
		~TrayIcon() noexcept;
		
		/// Move constructor.
		/// @param [in] rhs TrayIcon to move.
		TrayIcon(TrayIcon&& rhs) = default;
		
		/// Copy constructor.
		/// DELETED.
		/// @param [in] rhs TrayIcon to copy.
		TrayIcon(const TrayIcon& rhs) = delete;
		
		/// Move assignment operator.
		/// @param [in] rhs TrayIcon to move.
		/// @return This TrayIcon after the assignment operation.
		TrayIcon& operator=(TrayIcon&& rhs) = default;
		
		/// Copy assignment operator.
		/// DELETED.
		/// @param [in] rhs TrayIcon to copy.
		/// @return This TrayIcon after the assignment operation.
		TrayIcon& operator=(const TrayIcon& rhs) = delete;
		
		/// Hides the tray icon.
		void Hide() noexcept;
		
		/// Gets the visibility of the tray icon.
		/// @return true if the tray icon is visible; false if not.
		bool IsVisible() noexcept;
		
		/// Shows the tray icon.
		void Show() noexcept;
};
